iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

今天的目標是進一步優化爬蟲性能,並簡化數據處理流程,我將對網絡請求的並發進行控制,確保在處理大量數據時系統不會過載,同時我對數據處理過程進行簡化,減少不必要的操作,從而提升整體效率。

並發限制:是為了避免過多並發請求導致網路問題或伺服器過載,因此需要設置一個合理的並發限制。

import aiohttp
# 設置並發限制
connector = aiohttp.TCPConnector(limit_per_host=100)  # 限制每個主機的最大並發連接數

在上面這段 Code 中,我使用 aiohttpTCPConnector 來限制每個主機的最大並發連接數,這樣可以有效避免網絡過載,並保證爬蟲的穩定性。

異常處理機制:在進行大量網路請求時,異常處理機制是不可或缺的,我通過捕捉異常,並進行多次重試來提高數據抓取的成功率。

async def fetch_gene_page(session, url, retries=3):
    for attempt in range(retries):
        try:
            async with session.get(url, timeout=10) as response:
                response.raise_for_status()  # 檢查 HTTP 錯誤
                return await response.text()  # 成功則返回頁面內容
        except (aiohttp.ClientError, aiohttp.http_exceptions.HttpProcessingError) as e:
            logging.error(f"Error fetching {url}: {str(e)}")
            if attempt < retries - 1:
                await asyncio.sleep(2)  # 等待 2 秒後重試
                continue
            else:
                logging.error(f"Failed to fetch {url} after {retries} attempts.")
                return None

上面這段 Code 加入了異常處理和重試機制,確保即使在網絡波動或伺服器錯誤的情況下,爬蟲仍然能夠穩定運行。

通過今天的優化,我進一步提升了爬蟲的性能和穩定性,確保系統在大規模數據處理中保持高效運行。這些優化措施將使我能夠更快速、更可靠地完成數據抓取和處理工作。


上一篇
Day17:處理缺失值與異常數據
下一篇
Day19:整理最終爬取的基因數據
系列文
從零基礎到實戰:利用網頁爬蟲結合 RPKM 算法計算 COVID-19 感染者肺部基因表達量25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言